


import bpy

import Core.bl_渲染层 as 渲染层
import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类
from 全局控制.Node.节点数据类型 import bl_集合数据类型

from itertools import chain




'''def f_拷贝源物体数量update(self, context):
	差数 = len(self.m_拷贝物体源) - self.m_拷贝源_count
	#print('差数 = ', 差数)
	if 差数 > 0 :
		for i in range(差数):
			self.m_拷贝物体源.remove(len(self.m_拷贝物体源)-1)
	else:
		差数 = -差数
		for i in range(差数):
			self.m_拷贝物体源.add()'''


class C_SN_拷贝材质(基类.C_SN_基类):
	bl_dname = 'bl_node_拷贝材质'
	bl_label = '拷贝材质'
	
	m_是否实例 = bpy.props.BoolProperty(default=True)
	#m_拷贝物体源 = bpy.props.CollectionProperty(type=bl_集合数据类型.C_材质数据)
	#m_拷贝源_count = bpy.props.IntProperty(update=f_拷贝源物体数量update)

	#m_渲染层 = bpy.props.StringProperty(name='渲染层')
	def init(self, context):
		super(C_SN_拷贝材质, self).f_init(context)
		self.inputs.new('C_NodeSocket_物体', name='源对象')
		self.inputs.new('C_NodeSocket_i', name='复制数量')
		self.inputs.new('C_NodeSocket_文本', name='材质名称')

		self.outputs.new('C_NodeSocket_材质集', name='材质集')

	def draw_buttons(self, context, layout):
		layout.prop(self, "m_是否实例", text="是否实例")
		
		'''layout.separator()
		if bpy.data.collections.find(self.m_渲染层) >= 0 :
			layout.prop_search(self, "m_渲染层", bpy.data, "collections", text="层")
		else:
			布局 = layout.row()
			布局.prop(self, 'm_渲染层')
			布局.operator("node.update_node_create_collection").m_名称 = self.m_渲染层'''

	'''def update(self):
		if self.m_拷贝源_count > 0 :
			self.inputs['源对象'].hide = True
		else:
			self.inputs['源对象'].hide = False'''


	def f_update(self, 是否向下传递=False, input插座=None):
		释放老数据 = self.outputs['材质集'].f_getData()
		for mat in 释放老数据:
			bpy.data.materials.remove(mat)

		源对象 = self.inputs['源对象'].f_getData()
		#print('渲染层容器 = ', 渲染层容器)
		复制数量 = self.inputs['复制数量'].f_getData()
		材质名称 = self.inputs['材质名称'].f_getData()
		if 材质名称 == '' :
			材质名称 = 0

		源材质 = []
		for obj in 源对象:
			源材质.append(obj.material_slots[材质名称].material)
			
		new材质 = []
		复制数量 = int(self.inputs['复制数量'].f_getData())
		实例 = self.m_是否实例
		
		for i in range(复制数量):
			for mat in 源材质:
				new材质.append(mat.copy())
		print('复制数量 = ', 复制数量, len(源材质), 源对象)
		self.outputs['材质集'].f_setData(new材质)

		super(C_SN_拷贝材质, self).f_update(是否向下传递, input插座)
		

class C_NODE_MENU_拷贝材质(bpy.types.Operator):
	bl_idname = 'node.global_node_material_copy'
	bl_label = '拷贝材质'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_SN_拷贝材质', use_transform=True)
		return {'FINISHED'}





classes = (
	C_SN_拷贝材质,
	C_NODE_MENU_拷贝材质,
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)


